home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / magazyn_amiga / 2 / ami036_jak_wyjac_modul_amosem < prev    next >
Text File  |  1997-09-14  |  4KB  |  149 lines

  1. JAK WYJÂÊ MODUî AMOSEM?
  2.  
  3. <lead>Ostatnio bawiîem sië moduîami i napisaîem prosty ripper w
  4. AMOS-ie.
  5.  
  6. <a>XTD/Mystic
  7.  
  8. <txt>W tym artykule chciaîbym wszystkim amo-koderom przedstawiê
  9. sposoby na rypanie moduîów, pisanych pod Protrackerem.
  10.  
  11. Pierwszym i zarazem najczëôciej wykorzystywanym przez róûne
  12. programy sposobem jest wyszukiwanie w pamiëci ciâgu znaków
  13. "M.K.". Gdy juû znajdziemy taki ciâg, naleûy sprawdziê, czy
  14. rzeczywiôcie naleûy on do moduîu.
  15.  
  16. Zaîóûmy, ûe poczâtek ciâgu "M.K." jest pod adresem A.  Poczâtek
  17. moduîu, czyli np. A0, znajdujemy poprzez: A0=A-1080. No i jest
  18. poczâtek moduîu, ale czy na pewno jest to moduî? Przede wszystkim
  19. naleûy sprawdziê liczbë pozycji. Nie moûe ona przekroczyê 128
  20. (tyle tylko jest moûliwych do uzyskania w Protrackerze).
  21. Sprawdzamy wiëc A0+950. Jeôli liczba pozycji jest odpowiednia,
  22. sprawdzamy liczbë patternów. W tym celu odczytujemy wartoôci od
  23. A0+952 do A0+1079. Jeôli najwyûsza wartoôê nie przekracza 63, to
  24. juû prawie mamy moduîek. Warto jednak sprawdziê jego ogólnâ
  25. dîugoôê. W tym celu naleûy sprawdziê dîugoôê samego songu. Jeûeli
  26. najwyûszym patternem jest B (dla wygody bëdë operowaî na
  27. zmiennych), to dîugoôê songu moûna obliczyê ze wzoru:
  28.  
  29. <l>LNG=1084+1024*B
  30.  
  31. <txt>Aby znaleúê pierwszy sampel, dodajemy jedynie A0 do LNG:
  32.  
  33. <l>LNG1=LNG+A0
  34.  
  35. <txt>...i juû mamy adres sampelka. A ile zajmujâ takie sampelki?
  36. Naleûy to obliczyê.
  37.  
  38. <l>LNG2=0
  39.  
  40. For N=1 To 31  ;(31 sampli)
  41.  
  42. LNG2=LNG2+Peek(A0+42+(N-1)*30)*2
  43.  
  44. Next N
  45.  
  46. <txt>Tak wiëc dîugoôê moduîu to LNG+LNG2, a adres koïcowy to
  47. LNG1+LNG2. Teraz naleûy sprawdziê, czy dîugoôê moduîu nie wynosi
  48. np. 42 MB. Jeôli nie, to odczytujemy jego tytuî:
  49.  
  50. <l>TITLE$=""
  51.  
  52. For T=0 To 19
  53.  
  54. D=Peek(A0+T)
  55.  
  56. If D=0 Then Goto NETT
  57.  
  58. TITLE$=TITLE$+Chr$(D)
  59.  
  60. NETT:
  61.  
  62. Next T
  63.  
  64. <txt>Znaleziony moduîek zgrywamy np. tak:
  65.  
  66. <l>Bsave "dh1:modules/mod."+TITLE$,A0 To LNG1+LNG2
  67.  
  68. <txt>Tak, to jest sposób prosty. Nieraz jednak koder nie chce,
  69. ûeby pierwszy lepszy lamer "wyrypaî" sobie moduî i owe znaczki
  70. "M.K." kasuje. Co wtedy? Wtedy naleûy postâpiê trochë inaczej.
  71.  
  72. Cechâ charakterystycznâ moduîów protrackerowskich jest to, ûe
  73. usuniëto z nich Restart. Bajt odpowiadajâcy za Restart jest
  74. ustawiony stale na 127. Szukamy wiëc w pamiëci wszystkich bajtów,
  75. które wynoszâ 127. Nastëpnie znajdujemy adres poczâtkowy:
  76.  
  77. <l>A0=A-951    ;(A - adres, pod którym jest wartoôê 127)
  78.  
  79. <txt>Moûna sprawdziê moduî jak poprzednio, ale to moûe nie
  80. wystarczyê. Co wiëc sprawdziê dodatkowo?
  81.  
  82. Sampli jest 31, a wiëc ich numery powinny daê sië zapisaê w
  83. patternach przy uûyciu 5 bitów. A zapisujâ sië przy uûyciu 8.
  84. Przeglâdamy wiëc pierwszy pattern (domniemany pierwszy pattern).
  85.  
  86. <l>PATTSTR:
  87.  
  88. Gosub PATTSCAN
  89.  
  90. If ERR=1 Then Goto PATTSTR
  91.  
  92. <to moûe byê moduî>
  93.  
  94. Stop
  95.  
  96. PATTSCAN:
  97.  
  98. ERR=0
  99.  
  100. A1=A0+1084
  101.  
  102. For T1=0 to 63 ;(liczba pozycji w patternie)
  103.  
  104. For T2=0 to 3 ;(cztery kanaîy)
  105.  
  106. D=Peek(A1)
  107.  
  108. A1=A1+4
  109.  
  110. D=D/16.0 ;(cztery górne bity numeru sampla)
  111.  
  112. If D>1 Then ERR=1:Goto OVIR
  113.  
  114. Next T2
  115.  
  116. Next T1
  117.  
  118. OVIR:
  119.  
  120. Return
  121.  
  122. <txt>Poniewaû trzy z czterech górnych bitów sâ zawsze wyzerowane,
  123. czterobitowa wartoôê w wypadku moduîu nie powinna przekroczyê
  124. jedynki. Jeôli nie przekroczyîa w caîym domniemanym patternie, to
  125. moûna przypuszczaê, ûe jest to wîaônie moduî. Aby byê bardziej
  126. pewnym, ûe jest to moduî, naleûy to sprawdziê tak, jak w wypadku
  127. szukania ciâgu znaków "M.K.". A wiëc sprawdzamy liczbë pozycji,
  128. liczbë patternów, dîugoôê moduîu. Jeôli wszystko poszîo dobrze,
  129. to mamy moduî.
  130.  
  131. Oczywiôcie bardziej opîaca sië najpierw sprawdziê dîugoôê
  132. domniemanego moduîu, a dopiero potem pattern, ale kolejnoôê to
  133. juû sobie sami ustalicie.
  134.  
  135. Innym sposobem jest sprawdzenie dîugoôci poszczególnych sampli w
  136. domniemanym module. Dîugoôê ûadnego nie moûe przekraczaê 65535
  137. bajtów.
  138.  
  139. Tymi sposobami moûna zrobiê ripper nieco bardziej inteligentny,
  140. niû taki, który wyôwietla wszystko jak leci, nawet domniemane
  141. "moduîy" o dîugoôci 24 MB, majâcych 230 pozycji, na których
  142. zapisane jest 241 patternów. Takie moduîy zazwyczaj majâ nazwy:
  143. "@%Fbt^%" lub "!$xxc3$%^**!".
  144.  
  145. Ps. Osobiôcie nie polecam wyciâgania moduîów. Artykuî ten piszë dla
  146. tych, którzy nieraz lubiâ uprawiaê "sztukë dla sztuki" i bëdâ
  147. chcieli napisaê sobie jakiô ripper.
  148.  
  149.